/**
 * @file ProductStoreBean.java
 * Projet eCOM 2010 (Miage Descartes)
 * @author Doido Sébastien
 * @version 2
 * @brief Bean relatif au traitement d'un magasin de produits
 */
package ecom.beans;

import java.util.Collection;
import java.util.LinkedList;
import javax.ejb.Remote;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;

/**
 * @brief Bean relatif au traitement d'un magasin de produits
 * @author Sebastien
 */
@Entity
@Table(name = "STORE")
@Remote(ProductStoreRemote.class)
@NamedQueries({
    @NamedQuery(name = "getAllProductStores", query = "SELECT OBJECT(p) FROM ProductStoreBean p")
})
public class ProductStoreBean implements java.io.Serializable, ProductStoreRemote {

    private static final long serialVersionUID = -342878872006168028L;

    /**
     * @brief Identifiant unique du magasin
     */
    private int reference;	  // identifiant unique
    
    /**
     * @brief Compte 'Account' associé au magasin
     */
    private AccountBean account; // numero IBAN

    /**
     * @brief Nom du magasin
     */
    private String name;

    /**
     * @brief Ville du magasin
     */
    private String city;

    /**
     * @brief Lignes d'inventaire relatives à ce magasin
     */
    private Collection<WarehouseLineBean> stocks;

    public ProductStoreBean() {
        super();
        stocks = new LinkedList<WarehouseLineBean>();
    }

    /**
     * @brief Constructeur de magasin
     * @param productStoreAccount : compte
     * @param productStoreName : nom
     * @param city : ville
     */
    public ProductStoreBean(AccountBean productStoreAccount, String productStoreName, String city) {
        this();
        this.account = productStoreAccount;
        this.name = productStoreName;
        this.city = city;
    }

    /**
     * @brief Renvoie l'identifiant unique du magasin
     * @return l'identifiant unique du magasin
     */
    @Id
    @Column(name = "product_store_id")
    @GeneratedValue(strategy = GenerationType.AUTO)
    public int getReference() {
        return reference;
    }

    /**
     * @brief Renvoie le compte du magasin
     * @return le compte du magasin
     */
    @ManyToOne
    @JoinColumn(name = "accound_id")
    public AccountBean getAccount() {
        return account;
    }

    /**
     * @brief Renvoie le nom du magasin
     * @return le nom du magasin
     */
    public String getName() {
        return name;
    }

    /**
     * @brief Renvoie la ville du magasin
     * @return la ville du magasin
     */
    public String getCity() {
        return city;
    }

    /**
     * @brief Renvoie les lignes d'inventaire relatives au magasin
     * @return les lignes d'inventaire relatives au magasin
     */
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "store")
    public Collection<WarehouseLineBean> getStocks() {
        return stocks;
    }

    public void setReference(int reference) {
        this.reference = reference;
    }
    
    /**
     * @brief Définit un compte pour le magasin
     * @param account : le compte
     */
    public void setAccount(AccountBean account) {
        this.account = account;
    }

    public void setStocks(Collection<WarehouseLineBean> stocks) {
        this.stocks = stocks;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public void setName(String name) {
        this.name = name;
    }
    
    @Override
    public String toString() {
        return this.getReference() + "  | " + this.getName() + " (" + this.getCity() + ")";
    }

    
}
